package com.atguigu;

import lombok.Setter;

import java.util.Objects;

/**
 * @author li.chunlong lcl253-137@alibaba-inc.com
 * @desc 鸭子 - Context
 * @date 2021-11-01
 */
@Setter
public abstract class Duck {

    public Duck() {

    }

    /**
     * 属性, 策略接口
     */
    FlyBehavior flyBehavior;

    /**
     * 其它属性<->策略接口
     */
    QuackBehavior quackBehavior;

    /**
     * 显示鸭子信息
     */
    public abstract void display();

    public void quack() {
        System.out.println("鸭子嘎嘎叫~~");
    }

    public void swim() {
        System.out.println("鸭子会游泳~~");
    }

    /**
     * 改进
     */
    public void fly() {
        if(Objects.nonNull(flyBehavior)) {
            flyBehavior.fly();
        }
    }

}
